package core

import (
	"fmt"

	"github.com/spf13/viper"
)

// ReadConfig 基于配置文件路径读取配置
func ReadConfig(config, configType, configName string) (*viper.Viper, error) {
	v := viper.New()
	v.AddConfigPath(".")

	if config != "" {
		v.SetConfigFile(config)
	} else {
		v.SetConfigType(configType)
		v.SetConfigName(configName)
	}

	err := v.ReadInConfig()
	return v, err
}

func InitLogger(v *viper.Viper) error {
	var loggerParam LoggerParam
	var err error
	if err = v.UnmarshalKey("log", &loggerParam); err != nil {
		return fmt.Errorf("log param error: %v", err)
	}
	Log = loggerParam.New()
	return nil
}

func InitDB(v *viper.Viper) error {
	var mySQLParam MySQLParam
	var err error
	if err = v.UnmarshalKey("mysql", &mySQLParam); err != nil {
		return fmt.Errorf("mysql param error: %v", err)
	}
	if DB, err = mySQLParam.LinkMysql(); err != nil {
		return fmt.Errorf("mysql link error: %v", err)
	}
	return nil
}

func InitRedis(v *viper.Viper) error {
	var redisParam RedisParam
	var err error
	if err = v.UnmarshalKey("redis", &redisParam); err != nil {
		return fmt.Errorf("redis param error: %v", err)
	}
	Redis = redisParam.New()
	return nil
}
